package com.webflux.sample.webfluxmain;

import java.time.Duration;
import java.time.temporal.ChronoUnit;
import reactor.core.publisher.Flux;

public class _5_8operator_concatmap {

  public static void main(String[] args) {
    // concatMap操作符的作用也是把流中的每个元素转换成一个流，再把所有流进行合并。
    // concatMap会根据原始流中的元素顺序依次把转换之后的流进行合并，并且concatMap堆转换之后的流的订阅是动态进行的，
    // 而flatMapSequential在合并之前就已经订阅了所有的流
//    Flux.just(5).subscribe(System.out::println);

    Duration du1 = Duration.of(100, ChronoUnit.MILLIS);
    Flux<Long> longFlux = Flux.just(5, 10)
        .concatMap(x -> Flux.interval(Duration.of(x * 10, ChronoUnit.MILLIS), du1).take(x));

    longFlux.toStream()
        .forEach(System.out::println);
  }
}
